perm filename PUP2[1,DBL]1 blob sn#053744 filedate 1973-07-12 generic text, type T, neo UTF8
00100	  (PROGN (LISPXPRIN1 (QUOTE "FILE CREATED ")
00200	                     T)
00300	         (LISPXPRIN1 (QUOTE " 8-JUN-73  1:05:10")
00400	                     T)
00500	         (LISPXTERPRI T))
00600	  (LISPXPRINT (QUOTE PUPVARS)
00700	              T)
00800	  [RPAQQ PUPVARS
00900	         (NEED REQUIRE W $PGM $UNUSEDVARS
01000	               (FNS PURE RAMIFICATIONS REV2ELS CELLEQUAL LISTEQUAL 
01100	                    REPLACECDR REPLACECAR MAKENULL RPLAC NEWCELL 
01200	                    STORECVALUE CONSC SETQC TRANSITIVECLOSURE 
01300	                    TRYANYTHINGANTISYMPARTIAL SIMPLEGOAL SOLVE SETUP 
01400	                    INIT GETNEWLOCNAME DENYALL SERIESGOAL ORGOAL 
01500	                    ANDGOAL XORGOAL BUILDPGM)
01600	               (P (QSETUP PUPVARS]
01700	  (RPAQQ NEED NIL)
01800	  (RPAQQ REQUIRE NIL)
01900	  (RPAQQ W
02000	         (FNS RAMIFICATIONS REV2ELS CELLEQUAL LISTEQUAL REPLACECDR 
02100	              REPLACECAR MAKENULL RPLAC NEWCELL STORECVALUE CONSC SETQC 
02200	              TRANSITIVECLOSURE TRYANYTHINGANTISYMPARTIAL SIMPLEGOAL 
02300	              SOLVE SETUP INIT GETNEWLOCNAME DENYALL SERIESGOAL ORGOAL 
02400	              ANDGOAL XORGOAL BUILDPGM))
02500	  (RPAQQ $PGM (TUPLE))
02600	  (RPAQQ $UNUSEDVARS
02700	         (CLASS U5 U4 U3 U2 U6 U7 U8 U9 U10 U11 U12 U13 U14 U15 U16 U17 
02800	                U1))
02900	(DEFINEQ
03000	
03002	(PURE (QLAMBDA (TUPLE (TUPLE ←A ←←B) ←←C)
03004	  (QIF (QEQUAL $A COMMENT) ELSE (QPROG () (PRIN1 $A) (PRINT $$B)))
03006	  (QIF (QEQUAL $C (TUPLE)) ELSE (PURE (TUPLE $$C)))))
03008	
03100	(RAMIFICATIONS
03200	  [QLAMBDA
03300	    (TUPLE ←A
03400	           ←B)
03500	    (QPROG (←L
03600	             ←NEXT
03700	             ←S1
03800	             ←S2
03900	             ←S3)
04000	           (QMATCHQ ←L
04100	                    (QINSTANCES ←←ANY))
04200	           B1
04300	           (QATTEMPT (QMATCHQ (CLASS ←NEXT
04400	                                     ←←L)
04500	                              $L)
04600	             ELSE (QRETURN TRUE))
04700	           B2
04800	           [QATTEMPT (QMATCHQ (TUPLE ←←S1
04900	                                     $A ←←S2
05000	                                     $B ←←S3)
05100	                              $NEXT)
05200	               THEN (QPROG NIL (QDELETE (TUPLE $$S1 $A $$S2 $B $$S3))
05300	                           (QASSERT (TUPLE $$S1 $B $$S2 $A $$S3))
05400	                           (GOTO B3))
05500	             ELSE (QATTEMPT (QMATCHQ (TUPLE ←←S1
05600	                                            $B ←←S2
05700	                                            $A ←←S3)
05800	                                     $NEXT)
05900	                      THEN (QPROG NIL
06000	                                  (QDELETE (TUPLE $$S1 $B $$S2 $A $$S3))
06100	                                  (QASSERT (TUPLE $$S1 $A $$S2 $B $$S3))
06200	                                  (GOTO B3))
06300	                    ELSE (QATTEMPT (QMATCHQ (TUPLE ←←S1
06400	                                                   $A ←←S2)
06500	                                            $NEXT)
06600	                             THEN (QPROG NIL
06700	                                         (QDELETE (TUPLE $$S1 $A $$S2))
06800	                                         (QASSERT (TUPLE $$S1 $B $$S2))
06900	                                         (GOTO B3))
07000	                           ELSE (QATTEMPT (QMATCHQ (TUPLE ←←S1
07100	                                                          $B ←←S2)
07200	                                                   $NEXT)
07300	                                    THEN (QPROG NIL
07400	                                                (QDELETE (TUPLE $$S1 $B 
07500	                                                               $$S2))
07600	                                                (QASSERT (TUPLE $$S1 $A 
07700	                                                               $$S2]
07800	           B3
07900	           (QATTEMPT (QMATCHQ (TUPLE ←←S1
08000	                                     (TUPLE ←←NEXT)←←S2)
08100	                              $NEXT)
08200	               THEN (GOTO B2)
08300	             ELSE (GOTO B1])
08400	
08500	(REV2ELS
08600	  (QLAMBDA (TUPLE ←RELN
08700	                  ←A
08800	                  ←B)
08900	           (QIF (QAND (QEQUAL (QGET $RELN PARTIAL)
09000	                              TRUE)
09100	                      (QEQUAL (QGET $RELN ANTISYM)
09200	                              TRUE))
09300	             ELSE (QFAIL))
09400	           (QATTEMPT (QEXISTS (TUPLE $RELN $B $A))
09500	             ELSE (TRANSITIVECLOSURE (TUPLE $RELN $B $A)))
09600	           (QEXISTS (TUPLE C $A ←ACON))
09700	           (QEXISTS (TUPLE C $B ←BCON))
09800	           (QGOAL (TUPLE SERIES (TUPLE C $A $BCON)
09900	                         (TUPLE C $B $ACON))
10000	                  APPLY $GOALTYPE)))
10100	
10200	(CELLEQUAL
10300	  (QLAMBDA (CLASS ←A
10400	                  ←B)
10500	           (QAND (QATTEMPT (QEXISTS (TUPLE C $A ←VAL1)))
10600	                 (QATTEMPT (QEXISTS (TUPLE C $B ←VAL2)))
10700	                 (QEQUAL $VAL1 $VAL2))))
10800	
10900	(LISTEQUAL
11000	  [QLAMBDA (CLASS ←A
11100	                  ←B)
11200	           (QPROG (←E1
11300	                    ←E2
11400	                    ←E3
11500	                    ←E4)
11600	                  (QATTEMPT (QMATCHQ (TUPLE ←E1
11700	                                            ←←E2)
11800	                                     $A)
11900	                      THEN (QMATCHQ (TUPLE ←E3
12000	                                           ←←E4)
12100	                                    $B)
12200	                    ELSE (QATTEMPT (QMATCHQ (TUPLE ←E3
12300	                                                   ←←E4)
12400	                                            $B)
12500	                             THEN (QRETURN FALSE)
12600	                           ELSE (QRETURN TRUE)))
12700	                  (QIF (QAND (CELLEQUAL (CLASS $E1 $E3))
12800	                             (LISTEQUAL (CLASS $E2 $E4)))
12900	                      THEN (QRETURN TRUE)
13000	                    ELSE (QRETURN FALSE])
13100	
13200	(REPLACECDR
13300	  (QLAMBDA (TUPLE LIST ←L
13400	                  ←NEWCDR
13500	                  ←OLDCDR
13600	                  ←CAR)
13700	           (QDELETE (TUPLE LIST $L (TUPLE $CAR $$OLDCDR)))
13800	           (QASSERT (TUPLE LIST $L (TUPLE $CAR $$NEWCDR)))
13900	           (QMATCHQ ←PGM
14000	                    (TUPLE (TUPLE COMMENT WE REPLACE CDR OF LIST $L 
14100	                                  WHICH WAS $OLDCDR BY $NEWCDR)
14200	                           (TUPLE RPLACD $NEWCDR $L)
14300	                           $$PGM))))
14400	
14500	(REPLACECAR
14600	  (QLAMBDA (TUPLE LIST ←L
14700	                  ←NEWCAR
14800	                  ←OLDCAR
14900	                  ←CDR)
15000	           (QMATCHQ ←NEWLIST
15100	                    (TUPLE $NEWCAR $$CDR))
15200	           (QMATCHQ ←OLDLIST
15300	                    (TUPLE $OLDCAR $$CDR))
15400	           (QDELETE (TUPLE LIST $L $OLDLIST))
15500	           (QASSERT (TUPLE LIST $L $NEWLIST))
15600	           (QMATCHQ ←PGM
15700	                    (TUPLE (TUPLE COMMENT WE REPLACE CAR OF LIST $L 
15800	                                  WHICH WAS $OLDCAR
15900	                              BY THE CELL $NEWCAR)
16000	                           (TUPLE RPLACA $NEWCAR $L)
16100	                           $$PGM))))
16200	
16300	(MAKENULL
16400	  (QLAMBDA (TUPLE LIST ←L
16500	                  (TUPLE))
16600	           (QATTEMPT (QEXISTS (TUPLE LIST $L ←ANY))
16700	               THEN (QDELETE (TUPLE LIST $L $ANY)))
16800	           (QASSERT (TUPLE LIST $L (TUPLE)))
16900	           (QMATCHQ ←PGM
17000	                    (TUPLE (TUPLE COMMENT WE SET LIST $L TO NULL)
17100	                           (TUPLE SETQ $L NIL)
17200	                           $$PGM))))
17300	
17400	(RPLAC
17500	  [QLAMBDA (TUPLE LIST ←L
17600	                  (TUPLE ←CAR
17700	                         ←←CDR))
17800	           (QEXISTS (TUPLE LIST $L (TUPLE ←←CURRENT)))
17900	           (QMATCHQ (TUPLE ←CURCAR
18000	                           ←←CURCDR)
18100	                    $CURRENT)
18200	           (QIF (LISTEQUAL (CLASS $CURCDR $CDR))
18300	               THEN (REPLACECAR (TUPLE LIST $L $CAR $CURCAR $CDR))
18400	             ELSE (QIF (CELLEQUAL (CLASS $CURCAR $CAR))
18500	                      THEN (REPLACECDR (TUPLE LIST $L $CDR $CURCDR $CAR)
18600	                                       )
18700	                    ELSE (QFAIL])
18800	
18900	(NEWCELL
19000	  [QLAMBDA (TUPLE ←VAL
19100	                  ←LOC)
19200	           (QPROG (←AUXLOC)
19300	                  (QMATCHQ (CLASS ←AUXLOC
19400	                                  ←←UNUSEDVARS)
19500	                           $UNUSEDVARS)
19600	                  (QASSERT (TUPLE C $AUXLOC $VAL))
19700	                  (QMATCHQ ←PGM
19800	                           (TUPLE (TUPLE COMMENT I MAY NEED $VAL LATER 
19900	                                         SO BEFORE I STORE SOMETHING
20000	                                     IN LOCATION $LOC I AM TRANSFERRING 
20100	                                        $VAL
20200	                                     TO THE NEWLY CREATED LOCATION 
20300	                                        $AUXLOC)
20400	                                  (TUPLE SETQ $AUXLOC $LOC)
20500	                                  $$PGM])
20600	
20700	(STORECVALUE
20800	  [QLAMBDA ←LOC
20900	           (QPROG (←VALU
21000	                    ←RESERVE)
21100	                  (QATTEMPT (QEXISTS (TUPLE C $LOC ←VALU))
21200	                      THEN (QATTEMPT (QBEXISTS
21300	                                       (TUPLE C ←RESERVE
21400	                                              $VALU)
21500	                                         THEN (QIF (QEQUAL $RESERVE 
21600	                                                           $LOC)
21700	                                                  THEN (QFAIL)
21800	                                                ELSE (QPUT
21900	                                                       (TUPLE C 
22000	                                                           $RESERVE 
22100	                                                              $VALU)
22200	                                                       NEEDED TRUE)))
22300	                             ELSE (NEWCELL (TUPLE $VALU $LOC)))
22400	                    ELSE (QRETURN TRUE])
22500	
22600	(CONSC
22700	  [QLAMBDA
22800	    (TUPLE LIST ←L
22900	           (TUPLE ←CAR
23000	                  ←←CDR))
23100	    (QPROG (←M
23200	             ←S1
23300	             ←S2)
23400	           (QATTEMPT (QGOAL (TUPLE LIST $L $CDR)
23500	                            APPLY $GOALTYPE)
23600	               THEN (QATTEMPT (QEXISTS (TUPLE LIST ←M
23700	                                              (TUPLE ←←S1
23800	                                                     $CAR ←←S2)))
23900	                        THEN [QPROG (←M2
24000	                                      ←T)
24100	                                    (QMATCHQ ←T
24200	                                             (GETNEWLOCNAME))
24300	                                    (QDELETE (TUPLE LIST $L $CDR))
24400	                                    (QMATCHQ ←M2
24500	                                             (TUPLE $T $$CDR))
24600	                                    (QASSERT (TUPLE LIST $L $M2))
24700	                                    (QMATCHQ
24800	                                      ←PGM
24900	                                      (TUPLE (TUPLE COMMENT WE JUST 
25000	                                                    TOOK THE NEW CELL 
25100	                                                    $T
25200	                                                AND CONSED IT ONTO $L 
25300	                                                    SINCE $CAR ALREADY 
25400	                                                    BELONGS
25500	                                                TO ANOTHER LIST 
25600	                                                   STRUCTURE NAMELY $M)
25700	                                             (TUPLE SETQ $T $CAR)
25800	                                             (TUPLE SETQ L
25900	                                                    (TUPLE CONS $T $L))
26000	                                             $$PGM))
26100	                                    (QATTEMPT (QEXISTS (TUPLE C $CAR 
26200	                                                              ←M2))
26300	                                        THEN (QASSERT (TUPLE C $T $M2]
26400	                      ELSE (QPROG (←TEMP)
26500	                                  (QDELETE (TUPLE LIST $L $CDR))
26600	                                  (QMATCHQ ←TEMP
26700	                                           (TUPLE $CAR $$CDR))
26800	                                  (QASSERT (TUPLE LIST $L $TEMP))
26900	                                  (QMATCHQ ←PGM
27000	                                           (TUPLE (TUPLE COMMENT WE 
27100	                                                         JUST TOOK $CAR
27200	                                                     AND CONSED IT ONTO 
27300	                                                         LIST $L)
27400	                                                  (TUPLE SETQ $L
27500	                                                         (TUPLE CONS 
27600	                                                               $CAR $L))
27700	                                                  $$PGM])
27800	
27900	(SETQC
28000	  [QLAMBDA (TUPLE C ←NEWLOC
28100	                  ←NEWVAL)
28200	           (QPROG (←OLDLOC
28300	                    ←LOC2
28400	                    ←V)
28500	                  (QATTEMPT (QEXISTS (TUPLE C $NEWLOC ←V)
28600	                                     REQUIRED TRUE)
28700	                      THEN (QFAIL QPROG))
28800	                 (QATTEMPT (QEXISTS (TUPLE C ←OLDLOC
28900	                                  $NEWVAL))
28903	                   ELSE (QPROG (←AUXLOC)
28905	                          (QMATCHQ $PGM (TUPLE ←←A (TUPLE COMMENT
28907	       ←VOLD NO LONGER HAS THE VALUE $NEWVAL) (TUPLE ←←B)
28909	       (TUPLE ←←C) ←←D))
28911	      (QMATCHQ (CLASS ←AUXLOC ←←UNUSEDVARS) $UNUSEDVARS)
28913	      (QASSERT (TUPLE C $AUXLOC $VAL))
28915	      (QMATCHQ ←PGM (TUPLE $$A (TUPLE COMMENT $VOLD NO LONGER
28917	        HAS THE VALUE $NEWVAL BUT SINCE WE WILL NEED IT LATER
28919	        WE STORED $NEWVAL IN THE NEW AUXILLIARY CELL $AUXLOC)
28921	        (TUPLE $$B) (TUPLE $$C) (TUPLE SETQ $AUXLOC $VOLD) 
28923	       $$D))))
29000	                  (QATTEMPT (QEXISTS (TUPLE C ←LOC2
29100	                                            $NEWVAL)
29200	                                     NEEDED TRUE)
29300	                    ELSE (QPUT (TUPLE C $OLDLOC $NEWVAL)
29400	                               NEEDED TRUE))
29500	                  (QEXISTS (TUPLE C ←OLDLOC
29600	                                  $NEWVAL)
29700	                           NEEDED TRUE)
29900	                  (BUILDPGM (TUPLE $NEWLOC $NEWVAL $OLDLOC))
30000	                  (QDELETE (TUPLE C $NEWLOC ←V))
30100	                  (QASSERT (TUPLE C $NEWLOC $NEWVAL])
30200	
30300	(TRANSITIVECLOSURE
30400	  [QLAMBDA (TUPLE ←RELN
30500	                  ←A
30600	                  ←B)
30700	           (QIF (QEQUAL (QGET (TUPLE $RELN TRANSITIVE))
30800	                        TRUE)
30900	             ELSE (QFAIL))
31000	           (QBEXISTS (TUPLE $RELN $A ←ANY)
31100	               THEN (QIF (QEQUAL $ANY $B)
31200	                        THEN (QASSERT (TUPLE $RELN $A $B))
31300	                      ELSE (TRANSITIVECLOSURE (TUPLE $RELN $ANY $B])
31400	
31500	(TRYANYTHINGANTISYMPARTIAL
31600	  (QLAMBDA (TUPLE ←TYPE
31700	                  ←←STUFF
31800	                  (TUPLE ←RELN
31900	                         ←A
32000	                         ←B)←←STUFF2)
32100	           (QIF (QAND (QGET $RELN ANTISYM)
32200	                      (QGET $RELN PARTIAL))
32300	             ELSE (QFAIL))
32400	           (QIF (QOR (QATTEMPT (QEXISTS (TUPLE $RELN $A $B))
32500	                         THEN (QNOTEQUAL (QGET (TUPLE $RELN $A $B)
32600	                                               TEMP)
32700	                                         TRUE))
32800	                     (QATTEMPT (QEXISTS (TUPLE $RELN $B $A))
32900	                         THEN (QNOTEQUAL (QGET (TUPLE $RELN $B $A)
33000	                                               TEMP)
33100	                                         TRUE)))
33200	               THEN (QFAIL))
33300	           (QMATCHQ ←PGM
33400	                    (TUPLE (TUPLE COMMENT IF $A $RELN $B
33500	                               THEN)
33600	                           (TUPLE COND (TUPLE $RELN $A $B))
33700	                           $$PGM))
33800	           (QASSERT (TUPLE $RELN $A $B))
33900	           (QPUT (TUPLE $RELN $A $B)
34000	                 TEMP TRUE)
34100	           (QATTEMPT (QGOAL (TUPLE $TYPE $$STUFF (TUPLE $RELN $A $B)
34200	                                   $$STUFF2)
34300	                            APPLY $GOALTYPE)
34400	             ELSE (QMATCHQ ←PGM
34500	                           (TUPLE (TUPLE PRINT GIVEUP)
34600	                                  $$PGM)))
34700	           (QMATCHQ ←PGM
34800	                    (TUPLE (TUPLE COMMENT END OF THE
34900	                               THEN PART OF THE COND
35000	                                    AND THUS BEGIN THE
35100	                             ELSE PART OF THE COND)
35200	                           (TUPLE (TUPLE T))
35300	                           $$PGM))
35400	           (QDELETE (TUPLE $RELN $A $B))
35500	           (QASSERT (TUPLE $RELN $B $A))
35600	           (QPUT (TUPLE $RELN $B $A)
35700	                 TEMP TRUE)
35800	           (QATTEMPT (QGOAL (TUPLE $TYPE $$STUFF (TUPLE $RELN $A $B)
35900	                                   $$STUFF2)
36000	                            APPLY $GOALTYPE)
36100	             ELSE (QMATCHQ ←PGM
36200	                           (TUPLE (TUPLE PRINT GIVEUP)
36300	                                  $$PGM)))
36400	           (QMATCHQ ←PGM
36500	                    (TUPLE (TUPLE COMMENT END OF COND EXPRESSION)
36600	                           $$PGM))
36700	           (QDELETE (TUPLE $RELN $B $A))
36800	           BACKTRACK))
36900	
37000	(SIMPLEGOAL
37100	  [QLAMBDA ←ANYTHING
37200	           (QGOAL $ANYTHING APPLY $DO)
37300	           (COND
37400	             (REQUIRE (QPUT $ANYTHING REQUIRED TRUE])
37500	
37600	(SOLVE
37700	  (QLAMBDA ←PROBLEM
37800	           (QGOAL $PROBLEM APPLY $GOALTYPE)
37900	           (QMATCHQ ←PGM
38000	                    (QREVERSE $PGM))
38100	           (QMATCHQ ←PGM
38200	                    (TUPLE (TUPLE COMMENT BEGINNING OF PROGRAM)
38300	                           $$PGM
38400	                           (TUPLE COMMENT END OF PROGRAM)))
38403	          (PRINT $PGM)
38405	          (PRINT "
38407	
38409	LISP CODE ITSELF:
38411	
38413	
38415	                  ")
38417	          (PURE $PGM)
38419	          (TUPLE FINISHED THIS REQUEST)))
38500	
38600	(SETUP
38700	  (QLAMBDA ←ANYTHING
38800	           (DENYALL)
38900	           (QASSERT (TUPLE C A A3))
39000	           (QASSERT (TUPLE C B B3))
39100	           (QASSERT (TUPLE C C C3))
39200	           (QASSERT (TUPLE C D D3))
39300	           (QASSERT (TUPLE C E E3))
39400	           (QASSERT (TUPLE C F F3))
39500	           (QASSERT (TUPLE C G G3))
39600	           (QASSERT (TUPLE C I I3))
39700	           (QASSERT (TUPLE C J J3))
39800	           (QASSERT (TUPLE C K K3))
39900	           (QASSERT (TUPLE C H H3))
40000	           (QASSERT (TUPLE LIST L1 (TUPLE)))
40100	           (QASSERT (TUPLE LIST L2 (TUPLE)))
40200	           (QASSERT (TUPLE LIST L3 (TUPLE)))
40300	           (QASSERT (TUPLE LIST L4 (TUPLE A B C)))
40400	           (QASSERT (TUPLE LIST L5 (TUPLE D E)))
40500	           (QASSERT (TUPLE LESS I J))
40600	           (QASSERT (TUPLE LESS J K))
40700	           (QASSERT (TUPLE LESS H I))
40800	           (QPUT LESS ANTISYM TRUE)
40900	           (QPUT LESS PARTIAL TRUE)
41000	           (QPUT LESS TRANSITIVE TRUE)
41100	           (TUPLE SETUP COMPLETED)))
41200	
41300	(INIT
41400	  (QLAMBDA ←ANYTHING
41500	           (QMATCHQ ←GOALTYPE
41600	                    (TUPLE ORGOAL ANDGOAL XORGOAL SERIESGOAL SIMPLEGOAL 
41700	                           TRYANYTHINGANTISYMPARTIAL))
41800	           (QMATCHQ ←DO
41900	                    (TUPLE SETQC RPLAC CONSC MAKENULL TRANSITIVECLOSURE 
42000	                           REV2ELS))
42100	           (QMATCHQ ←PGM
42200	                    (TUPLE))
42300	           (QMATCHQ ←UNUSEDVARS
42400	                    (CLASS U1 U2 U3 U4 U5 U6 U7 U8 U9 U10 U11 U12 U13 
42500	                           U14 U15 U16 U17))
42600	           (QMATCHQ ←UNUSEDV
42700	                    $UNUSEDVARS)
42800	           $ANYTHING))
42900	
43000	(GETNEWLOCNAME
43100	  (QLAMBDA ←ANYTHING
43200	           (QPROG (←X)
43300	                  (QMATCHQ (CLASS ←X
43400	                                  ←←UNUSEDVARS)
43500	                           $UNUSEDVARS)
43600	                  (QRETURN $X))))
43700	
43800	(DENYALL
43900	  [QLAMBDA ←ANYTHING
44000	           (QATTEMPT (QDELETE (TUPLE C ←C1
44100	                                     ←V1)))
44200	           [QATTEMPT (QDELETE (TUPLE LIST ←L1
44300	                                     (TUPLE ←←V1]
44400	           (QATTEMPT (QDELETE (TUPLE LESS ←C1
44500	                                     ←V1])
44600	
44700	(SERIESGOAL
44800	  (QLAMBDA (TUPLE SERIES ←Z1
44900	                  ←←Z2)
45000	           (SETQ NEED NIL)
45100	           (SETQ REQUIRE NIL)
45200	           (QGOAL $Z1 APPLY $GOALTYPE)
45300	           (QIF (QEQUAL $Z2 (TUPLE))
45400	               THEN $PGM
45500	             ELSE (QGOAL (TUPLE SERIES $$Z2)
45600	                         APPLY $GOALTYPE))))
45700	
45800	(ORGOAL
45900	  (QLAMBDA (CLASS OR ←Z1
46000	                     ←←Z2)
46100	           (QATTEMPT (QGOAL $Z1 APPLY $GOALTYPE)
46200	               THEN (QMATCHQ ←PGM
46300	                             (TUPLE (TUPLE COMMENT
46400	                                       FROM THE ORTASK WE SHALL
46500	                                       DO $Z1)
46600	                                    $$PGM))
46700	             ELSE (QGOAL (CLASS OR $$Z2)
46800	                         APPLY $GOALTYPE))))
46900	
47000	(ANDGOAL
47100	  [QLAMBDA (CLASS AND ←←Z)
47200	           (QPROG (←Z1
47300	                    ←Z2
47400	                    ←Z3)
47500	                  (QMATCHQ ←Z3
47600	                           (CLASS))
47700	                  B1
47800	                  (QMATCHQ (CLASS ←Z1
47900	                                  ←←Z2)
48000	                           $Z)
48100	                  (QMATCHQ ←Z3
48200	                           (CLASS $$Z3 $Z1))
48300	                  (QMATCHQ ←Z
48400	                           (CLASS $$Z2))
48500	                  (SETQ NEED T)
48600	                  (SETQ REQUIRE T)
48700	                  (QATTEMPT (QGOAL $Z1 APPLY $GOALTYPE)
48800	                      THEN (QIF (QEQUAL $Z2 (CLASS))
48900	                               THEN (QIF (QEQUAL $Z3 (CLASS))
49000	                                        THEN $PGM
49100	                                      ELSE (QGOAL (CLASS AND $$Z3)
49200	                                                  APPLY $GOALTYPE))
49300	                             ELSE (QGOAL (CLASS AND $$Z2)
49400	                                         APPLY $GOALTYPE))
49500	                    ELSE (GO B1])
49600	
49700	(XORGOAL
49800	  (QLAMBDA (CLASS XOR ←Z1
49900	                  ←←Z2)
50000	           (QATTEMPT (QGOAL $Z1 APPLY $GOALTYPE)
50100	               THEN (QATTEMPT (QGOAL (CLASS NONEOF $$Z2)
50200	                                     APPLY $GOALTYPE)
50300	                        THEN (QMATCHQ ←PGM
50400	                                      (TUPLE (TUPLE COMMENT OF THE 
50500	                                                    EXCLUSIVE
50600	                                                OR GOAL WE DID $Z1
50700	                                                AND NO OTHERS ARE 
50800	                                                    SATISFIED)
50900	                                             $$PGM)))
51000	             ELSE (QGOAL (CLASS XOR $$Z2)
51100	                         APPLY $GOALTYPE))))
51200	
51300	(BUILDPGM
51400	  (QLAMBDA (TUPLE ←NEWLOC
51500	                  ←NEWVAL
51502	                   ←OV
51600	                  ←OLDLOC)
51700	           (QMATCHQ ←PGM
51800	                    (TUPLE (TUPLE COMMENT I JUST TRANSFERRED THE VALUE 
51900	                                  $NEWVAL FROM CELL $OLDLOC
52000	                              TO CELL $NEWLOC)
52100	                           (TUPLE SETQ $NEWLOC $OLDLOC)
52200	                           $$PGM))  
52202	          (QATTEMPT (QEXISTS (TUPLE C $OLDLOC ←OV))
52204	             THEN (QMATCHQ ←PGM (TUPLE (TUPLE COMMENT $OLDLOC
52206	                   NO LONGER HAS THE VALUE $OV) $$PGM)))))
52300	)
52400	  (QSETUP PUPVARS)
52500	STOP